/**
  ******************************************************************************
  * @文件名           : dri_DigitalQuantity.h
  * @作者             : citunhk
  * @功能介绍         :
  *	@日期             : 2022.11.1
  ******************************************************************************
  * @注意
  *
  *
  *
  ******************************************************************************
  *更改记录
  *日期 修改人 修改内容
  *
  *
  *
  ******************************************************************************
  */
#ifndef __DRI_DIGITALQUANTITY_H
#define __DRI_DIGITALQUANTITY_H

#include <stdint.h>
#include "bsp_gpio.h"

typedef enum
{
	OFF = 0U,
	ON,
	TOGGLE,
	STATE_NO_CONFIG
}equState_t;

typedef enum
{
	NC= 0U,
	NO,
	NORMAL_NO_CONFIG
}normalState_t;

typedef enum
{
	LEVEL= 0U,  //电平
	BORDER,  //边沿
	TRIGGER_NO_CONFIG
}triggerType_t;

typedef enum
{
	DI1= 0U,  /* 数字输入端口1 */
	DI2, 			/* 数字输入端口2 */
	DI3, 			/* 数字输入端口3 */
	DI4, 			/* 数字输入端口4 */
	DI5, 			/* 数字输入端口5 */
	DI6, 			/* 数字输入端口6 */
	DI7, 			/* 数字输入端口7 */
	DI8 			/* 数字输入端口8 */
}DI_List_t;

typedef enum
{
	LED_GREEN= 0U,  /* 数字输出端口1 */
	LED_RED, 			/* 数字输出端口2 */
	BUZZER, 			/* 数字输出端口3 */
	U1, 			/* 数字输出端口4 */
	U2, 			/* 数字输出端口5 */
	U3, 			/* 数字输出端口6 */
	U4, 			/* 数字输出端口7 */
	K1, 			/* 数字输出端口8 */
	K2, 			/* 数字输出端口9 */
	K3 			/* 数字输出端口10 */
}DO_List_t;

typedef enum
{
	IN_DISABLE= 0U,  /* 关闭 */
	LOW_LEVEL_ALARM,               	/* 低液位报警开关 */
	LOW_LEVEL_FAULT,                  	/* 低液位故障开关 */
	HIGHT_LEVEL,               			/* 高液位开关 */
	OVER_LEVEL,							/* 溢流液位开关 */
	OUTPUT_LOW_FLOW,					/* 输出循环低流量开关（冷冻水） */
	INPUT_LOW_FLOW,					/* 输入循环低流量开关（冷却水） */
	RE_HIGHT_PRESS,					/* 氟路高压开关 */
	RE_LOW_PRESS,						/* 氟路低压开关 */
	START_STOP_SWITCH,					/* 外部启停开关 */
	EMER_STOP_SWITCH,				/* 紧急停止开关 */
	RESET_ALARM,						/* 报警复位开关 */
	CYCLE_SWITCHING,					/* 循环切换开关 */
	RE_PRESS1,					/* 氟路1压力开关 */
	RE_PRESS2,					/* 氟路2压力开关 */
}digitalInType_t;

typedef enum
{
	OUT_DISABLE= 0U,  /* 关闭 */
	LED_RUN,			/* 运行指示灯 */
	LED_ALARM, 			/* 报警指示灯 */
	BUZZER1, 			/* 蜂鸣器 */
	PUMP,/* 水泵 */
	PUMP2,/* 水泵 */
	COMP,/* 压缩机 */
	COMP2,/* 压缩机2 */
	HEAT,/* 加热器 */
	RE_VALVE,/* 制冷电磁阀 */
	HIGH_TEMP_VALVE,  /* 高温辅助制冷电磁阀 */
	LOW_TEMP_VALVE,  /* 低温辅助制冷电磁阀 */
	CYCLE_SWITCHING_VALVE,  /* 内外循环切换电磁阀 */
	RETURN_VALVE,  /*气吹回液电磁阀*/
	DI_VALVE,  /* 水质控制电磁阀 */
	MAINTAIN_PUMP1,  /* 水泵1维护提示 */
	MAINTAIN_PUMP2,  /* 水泵2维护提示 */
	MAINTAIN_COMP,  /* 压缩机维护提示 */
	MAINTAIN_FAN,  /* 风扇维护提示 */
	MAINTAIN_FILTER1,  /* 过滤器1维护提示 */
	MAINTAIN_FILTER2,  /* 过滤器2维护提示 */
	MAINTAIN_DUSTPROOF_FILTER,  /* 防尘过滤器维护提示 */
	SELECT_MAINTAIN_OUT,/* 选择的维护提示 */
	ALL_MAINTAIN_OUT,/* 所有的维护提示 */
	RUN_STATE_OUT,  /* 运行状态输出 */
	DIGITAL_STATE_OUT,  /* 数字控制状态输出 */
	ALARM_OUT,  /* 故障输出 */
	WARNINGS_OUT,  /* 警告输出 */
	SELECT_ALARM_OUT,/* 选择的报警 */
	ALL_ALARM_OUT,/* 综合报警 */
}digitalOutType_t;

//typedef enum
//{
//	CLOSE1= 0U,  //关闭
//	STARTSTOP,  //启停
//	ALARMRESET,  //报警复位
//	SWITCH,  //外部保护开关
//	SWITCHING  //内外循环切换
//}DigitalQuantityInDefinition_t;
//
//typedef enum
//{
//	CLOSE6= 0U,  //关闭
//	OUTFLOWSW,  //出液流量开关
//	HIGHLEVEL  //高液位开关
//}DigitalQuantity2OutDefinition_t;
//
//typedef enum
//{
//	CLOSE5= 0U,  //关闭
//	REHIGHPRESS,  //氟路高压开关
//	OVERFLOW,  //溢流开关
//	COMP1PRESS, //压机1氟压开关
//	LOWLEVELUP //低液位上
//}DigitalQuantity4OutDefinition_t;
//
//typedef enum
//{
//	CLOSE3= 0U,  //关闭
//	RELOWPRESS,  //氟路低压开关
//	STOP,  //急停开关
//	COMP2PRESS, //压机2氟压开关
//	OVERFLOW2  //溢流开关
//}DigitalQuantity5OutDefinition_t;
//
//typedef enum
//{
//	CLOSE7= 0U,  //关闭
//	OVERFLOW3  //溢流开关
//}DigitalQuantity7OutDefinition_t;
//
//
//
//typedef enum
//{
//	ALARMHT1= 0U,  //回路1高温报警
//	ALARMLT1,  //回路1低温报警
//	ALARMLF1,  //回路1低流量报警
//	ALARMHP1,  //回路1高压报警
//	ALARMLP1,  //回路1低压报警
//	ALARMHT2,  //回路2高温报警
//	ALARMLT2,  //回路2低温报警
//	ALARMLF2,  //回路2低流量报警
//	ALARMHP2,  //回路2高压报警
//	ALARMLP2,  //回路2低压报警
//	ALARMHT3,  //回路3高温报警
//	ALARMLT3,  //回路3低温报警
//	ALARMLF3,  //回路3低流量报警
//	ALARMHP3,  //回路3高压报警
//	ALARMLP3,  //回路3低压报警
//	ALARMLW  //低水质报警
//}AlarmOutDefinition_t;

typedef struct
{
	GPIO_TypeDef *GPIOx;										/* 设备的GPIOx */
	uint32_t PinMask;												/* 设备的GPIO_Pin */
	digitalInType_t SignalType;								/* 设备的类型 */
	normalState_t NormalState;  							/* 设备无信号时的状态 常开或常闭 */
	triggerType_t TriggerType;								/* 信号触发类型 边沿或电平 */
	uint32_t DelayTimeS;										/* 检测延时时间 单位：s */
	equState_t EquState;        									/* 设备当前的状态 */
}Equ_DigitaIn_ConfigStruct;

typedef struct
{
	GPIO_TypeDef *GPIOx;										/* 设备的GPIOx */
	uint32_t PinMask;												/* 设备的GPIO_Pin */
	digitalOutType_t SignalType;								/* 设备的类型 */
	normalState_t NormalState;  							/* 设备无信号时的状态 常开或常闭 */
	equState_t EquState;        									/* 设备当前的状态 */
}Equ_DigitaOut_ConfigStruct;

extern Equ_DigitaIn_ConfigStruct Equ_DI_Struct[8];
extern Equ_DigitaOut_ConfigStruct Equ_DO_Struct[10];

//extern DigitalQuantityInType_t EQU_TYPE_IN6;  //用户自定义输入1-DIN6类型
//extern DigitalQuantityInType_t EQU_TYPE_IN7;  //用户自定义输入2-DIN7类型
//
//extern DigitalQuantityInDefinition_t EQU_DEFINITION_IN6;  //用户自定义输入1-DIN6定义
//extern DigitalQuantityInDefinition_t EQU_DEFINITION_IN7;  //用户自定义输入2-DIN7定义
//extern DigitalQuantity4OutDefinition_t EQU_DEFINITION_IN4;  //工厂自定义输入1-DIN4定义
//extern DigitalQuantity5OutDefinition_t EQU_DEFINITION_IN5;  //工厂自定义输入2-DIN5定义
//extern DigitalQuantity2OutDefinition_t EQU_DEFINITION_IN2;  //工厂自定义输入3-DIN2定义
//extern DigitalQuantity7OutDefinition_t EQU_DEFINITION_IN27;  //工厂自定义输入4-DIN7定义
//
//extern DigitalQuantityOutDefinition_t EQU_DEFINITION_OUT1;  //用户自定义输出1-KA1定义
//extern DigitalQuantityOutDefinition_t EQU_DEFINITION_OUT2;  //用户自定义输出2-KA2定义
//extern DigitalQuantity12OutDefinition_t EQU_DEFINITION_OUT3;  //工厂自定义输出1-KA3定义
//extern DigitalQuantity12OutDefinition_t EQU_DEFINITION_22;  //工厂自定义输出2-KA2定义
//
//extern AlarmOutDefinition_t EQU_ALARM_DEFINITION_OUT1;  //用户自定义输出1-KA1报警配置
//extern AlarmOutDefinition_t EQU_ALARM_DEFINITION_OUT2;  //用户自定义输出2-KA2报警配置
//
//extern MaintainOutDefinition_t EQU_MAINTAIN_DEFINITION_OUT1;  //用户自定义输出1-KA1维护提示配置
//extern MaintainOutDefinition_t EQU_MAINTAIN_DEFINITION_OUT2;  //用户自定义输出2-KA2维护提示配置

equState_t DRI_EQU_GetPinState(Equ_DigitaIn_ConfigStruct EQU_Name);
void DRI_EQU_SetPinState(Equ_DigitaOut_ConfigStruct EQU_Name,equState_t equState);

equState_t DRI_EQU_GetFunState(digitalInType_t inType);
triggerType_t DRI_EQU_GetFunTrigger(digitalInType_t inType);
void DRI_EQU_SetFunState(digitalOutType_t outType, equState_t state);

void DRI_EQU_UserConfig_Input1(void);
void DRI_EQU_UserConfig_Input2(void);
void DRI_EQU_UserConfig_Output1(void);
void DRI_EQU_UserConfig_Output2(void);

void DRI_EQU_FactoryConfig_Input1(void);
void DRI_EQU_FactoryConfig_Input2(void);
void DRI_EQU_FactoryConfig_Input3(void);
void DRI_EQU_FactoryConfig_Input4(void);
void DRI_EQU_FactoryConfig_Output1(void);
void DRI_EQU_FactoryConfig_Output2(void);

#endif
